function f_usage() 
{   #帮助信息函数
    echo
    echo -e "\033[33m请在5秒内输入 \033[32m[ help | h | H ] \033[33m并回车获取帮助信息\033[0m"
    read -t 5  __
    [ "$(grep -cwP "help|h|H" <<< "${__}")x" == "0x" ] && exit 1
    echo
    echo -e "\033[35m$(printf %-16s "Usage: ${0}")"
    echo -e "\033[32m$(printf %-16s ) [ -h src_host ]            \033[33m远程机器的ip, 需要从这个机器拉取sql文件"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -d dev|pro ]             \033[33m生产环境还是测试环境, 区别是线程数的限制不一样, 生产环境限制pro [300, 2000], dev [1000, 4000]"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -f src_sql_file_name ]   \033[33msql文件名(也是根据文件名来判断动作create|alter|drop|truncate)"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -e 1|0 ]                 \033[33m线上环境执行动作, 1 表示在线上环境执行, 0 表示不在线上环境执行, 默认是0"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -o simple|strict ]       \033[33m检查模式。strict表示严谨模式, simple表示简单模式, 默认是simple"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -F 1|0 ]                 \033[33m检查到有旧表在是否删除, 1 表示删除, 0 表示不删除, 默认是0, 遇到有旧表则退出"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -c 1|0 ]                 \033[33m是否删除pt-osc生成的old表. 1 表示删除, 0 表示不删除, 默认是1"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -k 1|0 ]                 \033[33m是否允许对外键表进行操作, 1 表示允许, 0表示不允许, 默认是0, 只有当使用pt的时候才生效"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -C 1|0 ]                 \033[33m0表示使用pt, 1 表示根据binlog格式或者机房选用ghost还是pt, 默认是1"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -K 1|0 ]                 \033[33m是否允许添加唯一键, 1 表示允许, 0表示不允许, 默认是0"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -T t1,t2 ]               \033[33m删表参数, 当-f后面是drop|truncate才有效"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -u mail_addr ]           \033[33m提交工单的用户邮箱, 作为入库信息"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -R max_repl_time ]       \033[33m允许最大延迟时间, 要求整型"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -N number ]              \033[33m动态调整chunk size/允许最大延迟时间, 要求整型, 只有当-a chunk_size|repl_time才有效"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -s check_slave_repl ]    \033[33m可选值'1|all', 1是默认值, 表示随机选一个从库(优先选与主库同机房)检查延迟, all表示检查所有从库"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -b true ]                \033[33m表示可以允许超过500G的大表进行改表, 默认是false, 就是说如果表的大小(包含索引)超过500G, 改表失败"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -S true ]                \033[33m可以允许磁盘空间不足需要改表的两倍但是磁盘空间大于表的一倍+50G, 否则磁盘空间不足两倍就改表失败"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -O order_id ]            \033[33m工单id"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -a drop_table ]          \033[33m删除表的动作, 目前支持的有[drop_table|later_drop_table|truncate_table|later_truncate_table]"
    echo
    echo -e "\033[32m$(printf %-16s )                            \033[33m更新改表状态的动作, 目前支持的有[start_task|stop_task|pause_task|big_table|disk_space]"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -D mysql_dbname ]        \033[33m删表动作有效(-a xxx), mysql数据库名"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -P mysql_port ]          \033[33m删表动作有效(-a xxx), mysql端口"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -A 0|1 ]                 \033[33m跳过快速改表检查逻辑, 直接使用工具改表, 默认是0, 不跳过"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -i number ]              \033[33m复制延迟在这个时间之内, 会先等待这个时间后再判断延迟是否大于max_repl_time, 测试环境用到"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -B true|false ]          \033[33mtrue表示不校验唯一索引的 null. 默认是false, 即如果目标字段存在null会导致唯一值检查不通过"
    echo
    echo -e "\033[32m$(printf %-16s ) [ -H ]                     \033[33m展示帮助信息"
    echo
    echo
    echo -e "\033[35m$(printf %-16s "改表部分,目前支持的改表动作如下:")"
    echo -e "\033[32m$(printf %-16s ) alter table t add/modify/drop [column] ... ;"
    echo -e "\033[33m$(printf %-16s )     -- 提示 : 对于8.0版本, 添加字段可以秒加, 要求只有添加字段的操作, 且不能有after, first等关键字"
    echo
    echo -e "\033[32m$(printf %-16s ) alter table t add/drop index ... ;"
    echo
    echo -e "\033[32m$(printf %-16s ) alter table t change col_old col_new int not null ...;"
    echo -e "\033[33m$(printf %-16s )     -- 需要将列属性保持一致, 否则将不同通过检测"
    echo
    echo -e "\033[32m$(printf %-16s ) alter table t rename index/key ... ;"
    echo -e "\033[33m$(printf %-16s )     -- 这个语法在8.0支持, 5.6不支持"
    echo
    echo -e "\033[32m$(printf %-16s ) alter table t rename column col_old to col_new ;"
    echo -e "\033[33m$(printf %-16s )     -- 这个语法在8.0支持, 5.6不支持"
    echo
    echo -e "\033[32m$(printf %-16s ) alter table t rename [to|as] table_new_name;"
    echo
    echo -e "$(printf %-16s ) alter table t engine=innodb;"
    echo 
    echo -e "$(printf %-16s ) alter table t [ default | CONVERT TO ] character set [=] utf8mb4|utf8;"
    echo 
    echo -e "$(printf %-16s ) alter table t auto_increment = xxx;"
    echo 
    echo -e "$(printf %-16s ) alter table t drop primary key, add primary key(pk_col);"
    echo 
    echo
    echo
    echo -e "\033[35m$(printf %-16s "删表/清数据部分, 使用'-T t1,t2,t3', 可以进行drop或者truncate操作, 具体是什么操作根据-a后面的行为而定")"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a drop_table -P 20001 -D wzq -T 't1_back' -u 1005155691@qq.com -O 49004504246          \033[33m普通删表"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a later_drop_table -P 20001 -D wzq -T 't1_back' -u 1005155691@qq.com -O 49004504246    \033[33m延迟删表（3天）"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a truncate_table -P 20001 -D wzq -T 't1_back' -u 1005155691@qq.com -O 49004504246      \033[33m普通清表"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a later_truncate_table -P 20001 -D wzq -T 't1_back' -u 1005155691@qq.com -O 49004504246\033[33m延迟清表（3天）"
    echo
    echo -e "\033[35m$(printf %-16s "更改改表工单状态 : ")"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a stop_task -u 1005155691@qq.com -O 49004504246                                        \033[33m终止该工单的改表操作"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a pause_task -u 1005155691@qq.com -O 49004504246                                       \033[33m暂停该工单的改表操作"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a start_task -u 1005155691@qq.com -O 49004504246                                       \033[33m继续该工单的改表操作"
    echo
    echo -e "\033[35m$(printf %-16s "更改改表工单chunk size/允许最大延迟时间 : ")"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a chunk_size -u 1005155691@qq.com -O 49004504246 -N 1000                               \033[33m修改chunk size"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a repl_time -u 1005155691@qq.com -O 49004504246 -N 100                                 \033[33m修改允许最大延迟时间"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a big_table -u 1005155691@qq.com -P 20001                                              \033[33m允许用户提交大于500GB表的工单"
    echo -e "\033[32m$(printf %-16s ) bash ${0} -a disk_space -u 1005155691@qq.com -P 20001                                             \033[33m当磁盘空间不满足2倍(满足一倍+50G)表大小的情况也允许用户提交工单"
    echo -e "\033[0m"
    exit 1
}

